/**
 * 版权所有(C)，上海勾芒信息科技，2017，所有权利保留。
 * 
 * 项目名：	cards-web
 * 文件名：	WxAppQrcodeServiceImpl.java
 * 模块说明：	
 * 修改历史：
 * 2017年4月21日 - Debenson - 创建。
 */
package cn.binarywang.wx.miniapp.api.impl;

import java.io.File;
import java.io.Serializable;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.gomore.jeecg.common.Assert;

import cn.binarywang.wx.miniapp.api.WxMaQrcodeServiceEx;
import cn.binarywang.wx.miniapp.api.WxMaServiceEx;
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
import me.chanjar.weixin.common.exception.WxErrorException;

/**
 * @author Debenson
 * @since 0.1
 */
public class WxMaQrcodeServiceExImpl extends WxMaQrcodeServiceImpl implements WxMaQrcodeServiceEx {
  static final Logger logger = LoggerFactory.getLogger(WxMaQrcodeServiceExImpl.class);

  private static final int QRCODE_DEF_SIZE = 430;

  private final WxMaServiceEx wxMaService;

  public WxMaQrcodeServiceExImpl(WxMaServiceEx wxMaService) {
    super(wxMaService);
    this.wxMaService = wxMaService;
  }

  @Override
  public File createQrcode(String path) throws WxErrorException {
    return createQrcode(path, QRCODE_DEF_SIZE);
  }

  @Override
  public File createWxacode(String path) throws WxErrorException {
    Assert.assertArgumentNotEmpty(path, "path");

    QrAppCodeRequest req = new QrAppCodeRequest(path);
    return this.wxMaService.execute(new QrAppCodeRequestExecutor(this.wxMaService.getRequestHttp()),
        CREATE_WXA_CODE_URL, req);
  }

  /**
   * @author Debenson
   * @since 0.1
   */
  public static class QrAppCodeRequest implements Serializable {
    private static final long serialVersionUID = 5703715243967849230L;

    private String path;

    public QrAppCodeRequest() {
    }

    public QrAppCodeRequest(String path) {
      this.path = path;
    }

    public String getPath() {
      return path;
    }

    public void setPath(String path) {
      this.path = path;
    }

    @Override
    public String toString() {
      return WxMaGsonBuilder.create().toJson(this);
    }

  }
}
